<html>
<head>
<meta charset="UTF-8">
<title>Entity - KBEngine bots 文档</title>
<link href="../../style.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td align=left style="background:#708090"> <font size=15 color=#ffffff> KBEngine </font></td></tr>
</table> <hr>
<h1>Entity类</h1>

<p style="text-align: center;"><span class="module_h1">[<a href="../Modules/KBEngine.html" class="module_h1">KBEngine模块</a>]</span></p><p>Entity是<a href="../Modules/KBEngine.html">KBEngine</a>模块的一部分。 <a href="#detailed_description">更多...</a></p><p></p><pre>import KBEngine</pre>

<h2><a href="#" onClick="obj=document.getElementById( 'functions' );vis = (obj.style.display == 'none') ? 'block' : 'none'; obj.style.display = vis; return false;" class="h2">成员函数</a></h2>
<table id="functions" cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr><td>
<span class="function_list">def <a href="#moveToPoint" class="function_list" >moveToPoint</a>( self, destination, velocity, distance, userData, faceMovement, moveVertically ):</span>
</td></tr>

<tr><td>
<span class="function_list">def <a href="#cancelController" class="function_list" >cancelController</a>( self, controllerID ):</span>
</td></tr>

<tr><td>
<span class="function_list">def <a href="#isPlayer" class="function_list" >isPlayer</a>( self ):</span>
</td></tr>

<tr><td>
    <span class="function_list">def <a href="#getComponent" class="function_list" >getComponent</a>( self, componentName, all ):</span>
</td></tr>

<tr><td>
    <span class="function_list">def <a href="#fireEvent" class="function_list" >fireEvent</a>( self, eventName, *args ):</span>
</td></tr>

<tr><td>
    <span class="function_list">def <a href="#registerEvent" class="function_list" >registerEvent</a>( self, eventName, callback ):</span>
</td></tr>

<tr><td>
    <span class="function_list">def <a href="#deregisterEvent" class="function_list" >deregisterEvent</a>( self, eventName, callback ):</span>
</td></tr>

</table>

<h2><a href="#" onClick="obj=document.getElementById( 'callbacks' );vis = (obj.style.display == 'none') ? 'block' : 'none'; obj.style.display = vis; return false;" class="h2">回调函数</a></h2>
<table id="callbacks" cellpadding=0 cellspacing=3 style="margin-left: 20px;">


<tr><td>
<span class="function_list">def <a href="#onEnterWorld" class="function_list" >onEnterWorld</a>( self ):</span>
</td></tr>

<tr><td>
<span class="function_list">def <a href="#onLeaveWorld" class="function_list" >onLeaveWorld</a>( self ):</span>
</td></tr>

<tr><td>
<span class="function_list">def <a href="#onEnterSpace" class="function_list" >onEnterSpace</a>( self ):</span>
</td></tr>

<tr><td>
<span class="function_list">def <a href="#onLeaveSpace" class="function_list" >onLeaveSpace</a>( self ):</span>
</td></tr>
</table>

<h2><a href="#" onClick="obj=document.getElementById( 'attributes' );vis = (obj.style.display == 'none') ? 'block' : 'none'; obj.style.display = vis; return false;" class="h2">属性</a></h2>
<table id="attributes" cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr valign=top><td><a href="#base" class="attribute_list" >base</a></td><td>&nbsp; 只读 <a href=../../keywords.html#EntityCall>ENTITYCALL</a>
</td></tr>

<tr valign=top><td><a href="#client" class="attribute_list" >cell</a></td><td>&nbsp; 只读 <a href=../../keywords.html#EntityCall>ENTITYCALL</a>
</td></tr>

<tr valign=top><td><a href="#className" class="attribute_list" >className</a></td><td>&nbsp; 只读 <a href="STRING.html">string</a>
</td></tr>

<tr valign=top><td><a href="#clientapp" class="attribute_list" >clientapp</a></td><td>&nbsp; 只读 <a href="../Classes/PyClientApp.html">PyClientApp</a>
</td></tr>

<tr valign=top><td><a href="#direction" class="attribute_list" >direction</a></td><td>&nbsp; Tuple of 3 floats as (roll, pitch, yaw)
</td></tr>

<tr valign=top><td><a href="#id" class="attribute_list" >id</a></td><td>&nbsp; 只读 Integer
</td></tr>

<tr valign=top><td><a href="#position" class="attribute_list" >position</a></td><td>&nbsp; <a href=../../keywords.html#vector3>Vector3</a>
</td></tr>

<tr valign=top><td><a href="#spaceID" class="attribute_list" >spaceID</a></td><td>&nbsp; 只读 uint32
</td></tr>

<tr valign=top><td><a href="#isOnGround" class="attribute_list" >isOnGround</a></td><td>&nbsp; 只读 bool
</td></tr>

</table>

<hr>
<a name="detailed_description"></a><h2>详细描述</h2>
类<a href=../../keywords.html#entity>Entity</a>的实例代表着在client上的游戏对象。
<br><br>

<br><br>
一个<a href=../../keywords.html#entity>Entity</a>可以通过<a href=../../keywords.html#EntityCall>ENTITYCALL</a>访问在base和cell应用程序上的等价的实体。这需要
一组远程调用的函数（在实体的.def文件里指定）。

<hr>
<h2>成员函数文档</h2>

<a name="moveToPoint"></a><p class="function_definition">
<span class="function_definition">def moveToPoint( <i>self, destination, velocity, distance, userData, faceMovement, moveVertically</i> ):</span>
</p>

<div class="function_description">
<b>功能说明：</b><br><br>
直线移动<a href=../../keywords.html#entity>Entity</a>到给定的坐标点，成功或失败会调用回调函数。<br>
任何<a href="Entity.html">实体</a>，在任意时刻只能有一个移动控制器，重复调用任何移动函数将终止之前的移动控制器。<br>
返回一个可以用于取消这次移动的控制器ID。

<br><br>例如：
<br><a href=../../keywords.html#entity>Entity</a>.<a href=Entity.html#cancelController>cancelController</a>( movementID )。
移动取消还可以调用<a href=../../keywords.html#entity>Entity</a>.<a href=Entity.html#cancelController>cancelController</a>( "Movement" )。当移动被取消之后通知方法将
不被调用。
<br><br>
回调函数如下定义：

<pre>	def onMove( self, controllerID, userData ):
	def onMoveOver( self, controllerID, userData ):
	def onMoveFailure( self, controllerID, userData ):
</pre>
</div>

<p>
<span class="function_links"><b>参看：</b></span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">
<tr><td><a href=../../keywords.html#entity>Entity</a>.<a href="Entity.html#cancelController">cancelController</a><br></td></tr>
</table>
</p>

<p>
<span class="function_parameter">参数：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr valign=top><td><span class="function_parameter_name"><i>destination</i></span></td><td><span class="function_parameter_description">
Vector3，<a href=../../keywords.html#entity>Entity</a>要移动到的目标位置点</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>velocity</i></span></td><td><span class="function_parameter_description">
float，<a href=../../keywords.html#entity>Entity</a>的移动速度，单位m/s</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>distance</i></span></td><td><span class="function_parameter_description">
float，距离目标小于该值停止移动，如果该值为0则移动到目标位置。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>userData</i></span></td><td><span class="function_parameter_description">
object，传给通知函数的数据
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>faceMovement</i></span></td><td><span class="function_parameter_description">
bool，如果实体面向移动方向则为true。如果是其它机制则为false。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>moveVertically</i></span></td><td><span class="function_parameter_description">
bool，设为true指移动为直线移动，设为false指贴着地面移动。
</span></td></tr>

</table>
</p>

<p>
<span class="function_return">返回：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">
<tr><td>
int，新创建的控制器ID。
</td></tr>
</table>
</p>



<a name="cancelController"></a><p class="function_definition">
<span class="function_definition">def cancelController( <i>self, controllerID</i> ):</span>
</p>

<div class="function_description">
<b>功能说明：</b><br><br>
函数cancelController停止一个控制器对<a href=../../keywords.html#entity>Entity</a>的影响。它只能在一个<a href=../../keywords.html#real>real</a>实体上被调用。
</div>

<p>
<span class="function_parameter">参数：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr valign=top><td><span class="function_parameter_name"><i>controllerID</i></span></td><td><span class="function_parameter_description">
controllerID是要取消的控制器的索引，它是一个整型。一个专用的控制器类型的字符串也可以作为它的类型。
例如，一次只有一个移动/导航控制器可以被激活，这可以用entity.cancelController( "Movement" )取消。
</span></td></tr>

</table>
</p>

<a name="isPlayer"></a><p class="function_definition">
<span class="function_definition">def isPlayer( <i>self</i> ):</span>
</p>

<div class="function_description">
<b>功能说明：</b><br><br>
这个函数返回这个<a href=../../keywords.html#entity>Entity</a>是否为当前客户端所控制的Player。
</div>

<p>
<span class="function_return">返回：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">
<tr><td>bool， 如果是当前客户端所控制的Player返回True，否则返回False。
</td></tr>
</table>
</p>


<a name="getComponent"></a><p class="function_definition">
<span class="function_definition">def getComponent( <i>self, componentName, all</i> ):</span>
</p>

<div class="function_description">
<b>功能说明：</b><br><br>
该函数用于获取实体所绑定的某一类组件实例。
</div>

<p>
<span class="function_parameter">参数：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr valign=top><td><span class="function_parameter_name"><i>componentName</i></span></td><td><span class="function_parameter_description">
string，组件类型名称，组件的模块名称。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>all</i></span></td><td><span class="function_parameter_description">
bool，如果为True，返回所有同类组件实例，否则只返回第一个或空列表。
</span></td></tr>
</table>
</p>


<a name="fireEvent"></a><p class="function_definition">
<span class="function_definition">def fireEvent( <i>self, eventName, *args</i> ):</span>
</p>

<div class="function_description">
<b>功能说明：</b><br><br>
该函数用于触发实体事件。
</div>

<p>
<span class="function_parameter">参数：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr valign=top><td><span class="function_parameter_name"><i>eventName</i></span></td><td><span class="function_parameter_description">
string，要触发的事件名称。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>args</i></span></td><td><span class="function_parameter_description">
要附带的事件数据，可变参数。
</span></td></tr>
</table>
</p>


<a name="registerEvent"></a><p class="function_definition">
<span class="function_definition">def registerEvent( <i>self, eventName, callback</i> ):</span>
</p>

<div class="function_description">
<b>功能说明：</b><br><br>
该函数用于注册实体事件。
</div>

<p>
<span class="function_parameter">参数：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr valign=top><td><span class="function_parameter_name"><i>eventName</i></span></td><td><span class="function_parameter_description">
string，要注册监听的事件名称。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>callback</i></span></td><td><span class="function_parameter_description">
当事件触发时，用于响应该事件的回调方法。
</span></td></tr>
</table>
</p>


<a name="deregisterEvent"></a><p class="function_definition">
<span class="function_definition">def deregisterEvent( <i>self, eventName, callback</i> ):</span>
</p>

<div class="function_description">
<b>功能说明：</b><br><br>
该函数用于注销监听实体事件。
</div>

<p>
<span class="function_parameter">参数：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">

<tr valign=top><td><span class="function_parameter_name"><i>eventName</i></span></td><td><span class="function_parameter_description">
string，要注销监听的事件名称。
</span></td></tr>

<tr valign=top><td><span class="function_parameter_name"><i>callback</i></span></td><td><span class="function_parameter_description">
要注销监听的回调方法。
</span></td></tr>
</table>
</p>


<hr>
<h2>回调函数文档</h2>





<a name="onEnterWorld"></a><p class="function_definition">
<span class="function_definition">def onEnterWorld( <i>self</i> ):</span>
</p>

<div class="function_description">如果实体非客户端控制实体，则表明实体进入了服务端上客户端控制的实体的View范围，此时客户端可以看见这个实体了。<br>
如果实体是客户端控制的实体则表明该实体已经在服务端创建了cell并进入了space。
</div>



<a name="onLeaveWorld"></a><p class="function_definition">
<span class="function_definition">def onLeaveWorld( <i>self</i> ):</span>
</p>

<div class="function_description">如果实体非客户端控制实体，则表明实体离开了服务端上客户端控制的实体的View范围，此时客户端看不见这个实体了。<br>
如果实体是客户端控制的实体则表明该实体已经在服务端销毁了cell并离开了space。
</div>



<a name="onEnterSpace"></a><p class="function_definition">
<span class="function_definition">def onEnterSpace( <i>self</i> ):</span>
</p>

<div class="function_description">客户端控制的实体进入了一个新的space。
</div>



<a name="onLeaveSpace"></a><p class="function_definition">
<span class="function_definition">def onLeaveSpace( <i>self</i> ):</span>
</p>

<div class="function_description">客户端控制的实体离开了当前的space。
</div>



<hr>
<h2>属性文档</h2>

<a name="base"></a><p class="attribute_definition">
<span class="attribute_definition">base</span>
</p>

<div class="attribute_description">base是用于联系<a href=../../baseapp/classes/Entity.html>Entity</a>实体的entityCall。这个属性是只读的，且如果这个实体没有关联的<a href=../../baseapp/classes/Entity.html>Entity</a>实体时属性是None。
</div>

<p>
<span class="attribute_links"><b>其他参考：</b></span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">
<tr><td><a href=../../keywords.html#entity>Entity</a>.<a href="Entity.html#clientEntity">clientEntity</a><br><a href=../../keywords.html#entity>Entity</a>.<a href="Entity.html#allClients">allClients</a><br><a href=../../keywords.html#entity>Entity</a>.<a href="Entity.html#otherClients">otherClients</a><br></td></tr>
</table>
</p>

<p>
<span class="attribute_type">类型：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">
<tr><td>只读的，<a href=../../keywords.html#EntityCall>ENTITYCALL</a>
</td></tr>
</table>
</p>


<a name="cell"></a><p class="attribute_definition">
<span class="attribute_definition">cell</span>
</p>

<div class="attribute_description">
<b>说明：</b><br><br>
cell是用于联系cell实体的<a href=../../keywords.html#EntityCall>ENTITYCALL</a>。这个属性是只读的，且如果这个base实体没有关联的cell时属性是None。
<br><br>
</div>

<p>
<span class="attribute_type">类型：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">
<tr><td>只读 <a href=../../keywords.html#EntityCall>ENTITYCALL</a>
</td></tr>
</table>
</p>

<a name="cellData"></a><p class="attribute_definition">
<span class="attribute_definition">cellData</span>
</p>

<div class="attribute_description">
<b>说明：</b><br><br>
cellData是一个字典属性。每当base实体没有创建它的cell实体时，cell实体的属性会保存在这里。
<br><br>
如果cell实体被创建，这些用到的值和<a href=#cellData>cellData</a>属性将被删除。除了cell实体在实体定义文件里指定的属性外，它还包含position, direction and
spaceID。
</div>

<p>
<span class="attribute_type">类型：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">
<tr><td><a href="CELLDATADICT.html">CELLDATADICT</a>
</td></tr>
</table>
</p>

<a name="className"></a><p class="attribute_definition">
<span class="attribute_definition">className</span>
</p>

<div class="attribute_description">
<b>说明：</b><br><br>
实体的类名。
</div>

<p>
<span class="attribute_type">类型：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">
<tr><td>只读，string
</td></tr>
</table>
</p>

<a name="clientapp"></a><p class="attribute_definition">
<span class="attribute_definition">clientapp</span>
</p>

<div class="attribute_description">
<b>说明：</b><br><br>
当前实体所属的客户端（对象）。
</div>

<p>
<span class="attribute_type">类型：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">
<tr><td>只读，<a href="../Classes/PyClientApp.html">PyClientApp</a>
</td></tr>
</table>
</p>

<a name="position"></a><p class="attribute_definition">
<span class="attribute_definition">position</span>
</p>

<div class="attribute_description">这个实体在世界空间中的坐标(x, y, z)，数据由服务端同步到客户端。

<br><br>

</div>

<p>
<span class="attribute_type">类型：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">
<tr><td><a href=../../keywords.html#vector3>Vector3</a>
</td></tr>
</table>
</p>


<a name="direction"></a><p class="attribute_definition">
<span class="attribute_definition">direction</span>
</p>

<div class="attribute_description">这个属性描述的是<a href=../../keywords.html#entity>Entity</a>在世界空间中的朝向，数据由服务端同步到客户端。
</div>

<p>
<span class="attribute_type">类型：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">
<tr><td>Vector3, 其中包含(roll, pitch, yaw)，以弧度表示。
</td></tr>
</table>
</p>


<a name="isOnGround"></a><p class="attribute_definition">
<span class="attribute_definition">isOnGround</span>
</p>

<div class="attribute_description">如果这个属性的值为True，<a href=../../keywords.html#entity>Entity</a>在地面上，否则为False。<br>
如果是客户端控制的实体该属性将会在改变时同步到服务端，其他实体则由服务端同步到客户端，客户端可以判断这个值来强制贴地避免精度带来的影响。
</div>

<p>
<span class="attribute_type">类型：</span>
<table border=0 cellpadding=0 cellspacing=3 style="margin-left: 20px;">
<tr><td>可读写， bool
</td></tr>
</table>
</p>



<hr>
<p class="copyrightFooter">版权归KBEngine所有。</p>
</body>
</html>
